/**
 * NOTICE: ORIGINAL FILE MODIFIED
 */

package com.aspose.cells.examples.featurescomparison.workbook.createnewspreadsheet;

import org.docx4j.openpackaging.io.SaveToZipFile;
import org.docx4j.openpackaging.packages.SpreadsheetMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.SpreadsheetML.WorksheetPart;
import org.xlsx4j.jaxb.Context;
import org.xlsx4j.sml.CTRst;
import org.xlsx4j.sml.CTXstringWhitespace;
import org.xlsx4j.sml.Cell;
import org.xlsx4j.sml.Row;
import org.xlsx4j.sml.STCellType;
import org.xlsx4j.sml.SheetData;
import org.xlsx4j.sml.Worksheet;

import com.aspose.cells.examples.Utils;

public class Xlsx4jNewSpreadSheet
{
    public static void main(String[] args) throws Exception {
        // The path to the documents directory.
        String dataDir = Utils.getDataDir(Xlsx4jNewSpreadSheet.class);
        String outputfilepath = dataDir + "newWorksheet_Xlsx4j.xlsx";

        SpreadsheetMLPackage pkg = SpreadsheetMLPackage.createPackage();

        WorksheetPart sheet = pkg.createWorksheetPart(new PartName("/xl/worksheets/sheet1.xml"), "Sheet1", 1);

        addContent(sheet);

        SaveToZipFile saver = new SaveToZipFile(pkg);
        saver.save(outputfilepath);

        System.out.println("\n\n done .. " + outputfilepath);	
    }
	
    private static void addContent(WorksheetPart sheet) {		
        // Minimal content already present
        SheetData sheetData = sheet.getJaxbElement().getSheetData();

        // Now add
        Row row = Context.getsmlObjectFactory().createRow();
        Cell cell = Context.getsmlObjectFactory().createCell();
        cell.setV("1234");
        row.getC().add(cell);


        row.getC().add(createCell("hello world!"));

        sheetData.getRow().add(row);
    }
	
    /**
    // Note: if you are trying to add characters, not a number,
    // the easiest approach is to use inline strings (as opposed to the shared string table).
    // See http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/11/22/screen-cast-write-simpler-spreadsheetml-when-generating-spreadsheets.aspx
    // and http://www.docx4java.org/forums/xlsx-java-f15/cells-with-character-values-t874.html
    */
    private static Cell createCell(String content) {
        Cell cell = Context.getsmlObjectFactory().createCell();

        CTXstringWhitespace ctx = Context.getsmlObjectFactory().createCTXstringWhitespace();
        ctx.setValue(content);

        CTRst ctrst = new CTRst();
        ctrst.setT(ctx);

        cell.setT(STCellType.INLINE_STR);
        cell.setIs(ctrst); // add ctrst as inline string

        return cell;
    }

}
